02. git add
移至正确的项目
如果你一直跟着操作,那么现在你的计算机中,应该在两个目录下有 git 项目:
-
new-git-project - 使用
git init转换为 git 仓库的空目录 -
course-git-blog-project - 使用
git clone获得的现有博客项目
为了避免与已有的 commit 产生混淆,我们将向 new-git-project 仓库提交 commit。
在终端上,确保使用
cd
命令转到
new-git-project
目录中。如果你没有
new-git-project
目录,现在创建一个。位于该目录中后,运行
git init
命令。如果你之前已经运行了
git init
,没关系。多次运行
git init
不会导致任何问题,因为它只是重新初始化 Git 目录。
正确设置
Task Description:
现在该确保我们的配置是一样的了:
Task Feedback:
很棒!
你的终端应该如下图所示:
位于 new-git-project 目录中的终端。
状态!状态!状态!
我已经多次提到,但是还是要提下,
git status
命令在这节课将非常有用。你应该在任何一个其他 git 命令之前和之后运行
git status
命令。
我们立即运行该命令吧!
终端显示了
git status
命令的输出结果。
git status 输出总结
以下是输出:
On branch master
Initial commit
nothing to commit (create/copy files and use "git add" to track)
注意最后一行 –
nothing to commit (create/copy files and use "git add" to track)
。注意到它推荐使用的
git add
命令了吗?这很有帮助!
git status
的输出结果将给出下一步应该怎么做的建议或提示。
我们根据反馈的建议操作,并创建一些文件。
创建 HTML 文件
首先,创建一个叫做
index.html
的文件,并添加一些起始代码:
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Blog Project</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="description" content="">
<link rel="stylesheet" href="css/app.css">
</head>
<body>
<script src="js/app.js"></script>
</body>
</html>
注意,代码引用了 CSS 文件和 JavaScript 文件。
现在创建这些 CSS 和 JavaScript 文件。你可以让这两个文件留空。稍后我们将向文件中添加内容。
验证项目设置
Task Description:
在继续之前,确保我们的设置相同。完成后请清点一下这些状态进行确认:
Task Feedback:
很棒!
快速检查 git 状态
我们刚刚通过添加了文件和内容对仓库进行了几个更改。现在该快速检查下 git 的状态了:
$ git status
我的终端显示了以下内容:
终端在新加入的"Untracked files"部分显示了 index.html 文件,以及 css 与 js 文件夹。
整体回顾
很酷吧?我们尚未对 git 执行任何特殊操作,但是它已经在观察这个目录(因为它是 git 项目),并且知道我们创建了几个新的文件。
git status
命令的输出同样十分简洁地告诉我们 git 没有跟踪这些文件。
我们快速回顾一下正在进行的操作以及将要执行的操作:
-
我们新建了几个希望 git 开始跟踪的文件
-
为了让 git 能跟踪文件,需要将该文件提交到仓库中
-
要提交文件,需要将该文件放入暂存区
-
可以使用
git add命令将文件从工作目录移到暂存区 -
工作目录中目前有三个未跟踪文件
-
index.html -
css目录下的app.css -
js目录下的app.js
要将所有文件提交到仓库中,首先需要将这些文件从工作目录移到暂存区。我们将使用
git add
命令将这三个文件移到暂存区。
未跟踪的 HTML、CSS 和 JavaScript 文件从工作目录添加到了暂存区。
暂存文件
是时候行动了!在终端上运行以下命令,使用
git add
将
index.html
添加到暂存区:
$ git add index.html
注意:我们仅添加了
index.html
文件。稍后我们将添加 CSS 和 JavaScript 文件。
终端正在输入命令"git add index.html"以将该文件添加到暂存区。
运行
git add
命令没有任何输出(同样也没有错误)。如何让 git 告诉我们它执行了什么操作以及添加的
index.html
文件发生了什么呢?
git status
就可以告诉我们这些信息。你可能对我一直在强调
git status
命令的重要性开始感到厌烦了,但是它是非常重要的命令,特别是在你对版本控制/命令行工具不是非常熟练的时期,更要注重该命令。
我们来看看项目的状态:
$ git status
这是我获得的输出结果:
终端运行
git status
命令的结果如下。它显示 index.html 现在位于"Changes to be committed"分类下。
Changes to be committed
输出结果中现在出现了全新的区域:"Changes to be committed"区域!这一新的"Changes to be committed"区域显示了位于暂存区的文件!目前只显示了
index.html
文件,因此暂存区只有这个文件。继续这一思路,如果我们现在提交 commit,则只有 index.html 文件会被提交。
提示:你注意到"Changes to be committed"下方的帮助文本了吗?它提示
(use "git rm --cached <file>..." to unstage),也就是当你不小心运行了git add并提供了错误文件,它会提示你应该怎么操作。
顺便提下,
git rm --cached与 shell 的rm命令不同。git rm --cached不会破坏任何属于你的文件,它只是从暂存区删掉了文件。
此外,帮助文本中出现了"unstage"(撤消暂存)字眼。将文件从工作目录移到暂存区叫做"staging"(暂存)。如果已移动文件,则叫做"staged"(已暂存)。从暂存区将文件移回工作目录将"unstage"(撤消暂存)。如果你阅读的文档中提示“stage the following files”,则表明你应该使用
git add命令。
暂存剩余的文件
index.html
文件已暂存。我们再暂存另外两个文件。现在我们可以运行以下命令:
$ git add css/app.css js/app.js
但是要输入的内容好多啊。我们可以使用一个特殊的命令行字符:
句点
.
句点指代当前目录,可以用来表示所有文件和目录(包括所有嵌套文件和目录!)。
```bash
$ git add css/app.css js/app.js
# 等同于
$ git add .
```
唯一要注意的是,你可能会不小心包含多余的文件。现在,我们希望同时暂存
css/app.css
和
js/app.js
,因此运行该命令没问题。现在假设你向
img
目录添加了一些图片,但是暂时不想暂存这些图片。运行
git add .
将暂存这些图片。如果你暂存了不想暂存的文件,
git status
会告诉你撤消暂存需要用到的命令。
暂存剩余的文件
我们使用以下简写命令暂存剩余的文件:
$ git add .
然后运行
git status
:
终端显示 index.html、css/app.css 和 js/app.js 已被暂存。
git add 小结
git add
命令用于将文件从工作目录移到暂存区。
$ git add <file1> <file2> … <fileN>
此命令:
-
可接受多个文件名(用空格分隔)
-
此外,可以使用句点
.来代替文件列表,告诉 git 添加当前目录至暂存区(以及所有嵌套文件)